"""
要求大家实现一个银行系统吧，要求以面向对象的形式实现
1、开户  2、取款  3、存款  4、转账

1、账户信息（类）包含：银行卡号（自动生成的）、用户名、密码、账户余额
开户需要提交用户名、密码、开户金额  显示开户成功，然后显示卡号
2、取款：输入银行卡号、密码、取款金额
3、存款：输入银行卡号、密码、存款金额
4、转账：输入你的银行卡号 密码  对方的银行卡号 转账金额
    校验银行卡号是否存在
    校验余额是否充足

构建一个类
账户信息类：
    实例属性：银行卡号、用户名、密码、账户余额
bank类：
    类属性：账号信息列表
    实例函数：
       开户(账号、密码、金额)
ATM类：
    实例函数：
       取款（账号、密码、金额）
       存款（账号、密码、金额）
       转账（你的账号、对方账号、密码、金额）
"""
import random
class Acount():
    def __init__(self, name, password,amount,card):
        self.name = name
        self.password = password
        self.amount = amount
        self.card=card

class Bank():
    acounts =[]
    def kaihu(self,name,password,amount):
        # 1、生成16位的银行卡号
        card = ""
        for i in range(16):
            card += str(random.randint(0,9))
        acount = Acount(name,password,amount,card)
        Bank.acounts.append(acount)
        print(f"恭喜你，开户成功，你的卡号为{card},账户余额为{amount},账户密码为{password}")

class ATM():
    def getMoney(self,card,password,amount):
        flag = False
        for item in Bank.acounts:
            if item.card==card and item.password==password:
                flag = True
                if item.amount>=amount:
                    item.amount-=amount
                    print(f"恭喜你，取款{amount}成功，账户余额还剩{item.amount}")
                else:
                    print("余额不足，无法取款")
                break

        if not flag:
            print("账号或密码错误，无法取款")

    def putMoney(self, card, password, amount):
        flag = False
        for item in Bank.acounts:
            if item.card == card and item.password == password:
                flag = True
                item.amount += amount
                print(f"恭喜你，存款{amount}成功，账户余额还剩{item.amount}")
                break

        if not flag:
            print("账号或密码错误，无法存款")


icbc = Bank()
atm = ATM()
while True:
    print("1、开户 2、取款 3、存款 4、转账")
    menu = input("请输入你的操作：")
    match menu:
        case "1":
           name = input("请输入你的姓名：")
           password = input("请输入你的密码：")
           amount = float(input("请输入你的预存金额："))
           icbc.kaihu(name,password,amount)
        case "2":
            card = input("请输入你的卡号：")
            password = input("请输入你的密码：")
            amount = float(input("请输入你的取款金额："))
            atm.getMoney(card,password,amount)
        case "3":
            card = input("请输入你的卡号：")
            password = input("请输入你的密码：")
            amount = float(input("请输入你的存款金额："))
            atm.putMoney(card, password, amount)
        case "4":
            pass
        case _:
            break







